package net.cyue.ort.llm.data;

/**
 * Token数据类
 * 表示一个token及其相关分数
 * 实现了Comparable接口，按分数降序排序
 */
public class Token implements Comparable<Token> {
    private final long id;
    private final double score;
    
    /**
     * 创建Token（分数为0）
     */
    public Token(long id) {
        this(id, 0.0);
    }
    
    /**
     * 创建Token（使用float分数，自动转换为double）
     */
    public Token(long id, float score) {
        this.id = id;
        this.score = score;
    }
    
    /**
     * 创建Token（使用double分数）
     */
    public Token(long id, double score) {
        this.id = id;
        this.score = score;
    }
    
    public long getId() {
        return id;
    }
    
    /**
     * 获取token ID（兼容data.Token的getTokenID方法）
     */
    public long getTokenID() {
        return id;
    }
    
    public double getScore() {
        return score;
    }
    
    /**
     * 获取分数（double类型，兼容data.Token）
     */
    public double getScoreDouble() {
        return score;
    }
    
    @Override
    public int compareTo(Token other) {
        // 按分数降序排序（分数高的在前）
        return Double.compare(other.score, this.score);
    }
    
    @Override
    public String toString() {
        return "Token{" +
            "id=" + id +
            ", score=" + score +
            '}';
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Token token = (Token) o;
        return id == token.id;
    }
    
    @Override
    public int hashCode() {
        return Long.hashCode(id);
    }
}

